﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIM.Geo.DA;
using SIM.Geo.BE;

namespace SIM.Geo.BL
{
    public class BLUnidadMinera
    {
        #region Metodos
        /// <summary>
        /// Método devuelve la lista de unidades mineras
        /// </summary>
        /// <returns></returns>
        public List<UnidadMinera> ListarUnidadMinera()
        {
            return Accesor.ListarUnidadMinera();
        }

        /// <summary>
        /// Método inserta una nueva unidad minera
        /// </summary>
        /// <param name="zona"></param>
        /// <returns></returns>
        public int InsertarUnidadMinera(UnidadMinera unidadMinera)
        {
            int codigoNuevo = this.GenerarCodigoUnidadMinera();
            unidadMinera.CodigoUnidad = codigoNuevo;
            return Accesor.InsertarUnidadMinera(unidadMinera);
        }

        /// <summary>
        /// Método modifica una unidad minera
        /// </summary>
        /// <param name="zona"></param>
        public void ModificarUnidadMinera(UnidadMinera unidadMinera)
        {
            var unidadmineraEdit = Accesor.ObtenerUnidadMinera(unidadMinera.CodigoUnidad);
            unidadmineraEdit.Nombre = unidadMinera.Nombre;
            unidadmineraEdit.RangoInicialEste = unidadMinera.RangoInicialEste;
            unidadmineraEdit.RangoFinalEste = unidadMinera.RangoFinalEste;
            unidadmineraEdit.RangoInicialNorte = unidadMinera.RangoInicialNorte;
            unidadmineraEdit.RangoFinalNorte = unidadMinera.RangoFinalNorte;
            unidadmineraEdit.RangoInicialCota = unidadMinera.RangoInicialCota;
            unidadmineraEdit.RangoFinalCota = unidadMinera.RangoFinalCota;
            unidadmineraEdit.RangoInicialSeccion = unidadMinera.RangoInicialSeccion;
            unidadmineraEdit.RangoFinalSeccion = unidadMinera.RangoFinalSeccion;
            Accesor.ModificarUnidadMinera(unidadmineraEdit);
        }

        /// <summary>
        /// Método elimina unidad minera
        /// </summary>
        /// <param name="zona"></param>
        public void EliminarUnidadMinera(int codigoUnidadMinera)
        {
            var unidadMinera = this.ObtenerUnidadMinera(codigoUnidadMinera);
            Accesor.EliminarUnidadMinera(unidadMinera);
        }

        /// <summary>
        /// Método devuelve una unidad minera por codigo
        /// </summary>
        /// <param name="codigoZona"></param>
        /// <returns></returns>
        public UnidadMinera ObtenerUnidadMinera(int codigoUnidadMinera)
        {
            return Accesor.ObtenerUnidadMinera(codigoUnidadMinera);
        }

        /// <summary>
        /// Lista Unidad Minera por Nombre , si usa para hacer validaciones en la App
        /// </summary>
        /// <param name="nombreUnidadMinera"></param>
        /// <returns></returns>
        public List<UnidadMinera> ListarUnidadMineraPorNombre(string nombreUnidadMinera)
        {
            return Accesor.ListarUnidadMineraPorNombre(nombreUnidadMinera);
        }

        /// <summary>
        /// Método devuelve la lista para ComboBox, DropdownList, devuelve campos Value y Text
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem()
        {
            var result = Accesor.ListarUnidadMinera();
            return result.Select(x => new ListItemInt { Value = x.CodigoUnidad, Text = x.Nombre }).OrderBy(x => x.Text).ToList();
        }
        #endregion
        #region Utilidades
        /// <summary>
        /// Método que genera el codigo unidad minera
        /// </summary>
        /// <returns></returns>
        public int GenerarCodigoUnidadMinera()
        {
            int codigoMaximo = 1;
            var lista = Accesor.ListarUnidadMinera();
            if (lista.Count > 0)
            {
                codigoMaximo = lista.OrderByDescending(x => x.CodigoUnidad).FirstOrDefault().CodigoUnidad + 1;
            }
            return codigoMaximo;
        }
        #endregion

        #region Accesor
        private static DAUnidadMinera Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DAUnidadMinera(); }
        }
        #endregion
    }
}
